/**
 * <p>Title: AuthorityManager</p>
 * <p>Description: The Interface of Authority Manager</p>
 * <p>Copyright: Baosight Software LTD.co Copyright (c) 2016</p>
 * <p>Company: Baosight Software</p>
 * @author Zuo Yefeng and Chen Wei
 * @version 1.0
 * <pre>Histroy:
 *       2016-9-18  Zuo Yefeng  Create
 *       2016-12-19  Chen Wei 
 *</pre>
*/

package cn.jhg.account.service;

import java.util.List;

import cn.jhg.account.entity.Authority;
import cn.jhg.account.entity.UserGroup;
import cn.jhg.account.util.ServiceResult;

public interface AuthoritySvc {
	/**
	 * 新增权限
	 * @param authority	权限实体
	 * @param sid   签名 id（操作前用户确认签名记录的 id）
	 * @param iuid	调用者 id
	 * @return		Error Code
	 */
	public ServiceResult<Integer> addAuthority(Authority authority, int sid, int iuid);

	/**
	 * 删除权限
	 * @param auid	Authority ID
	 * @param sid   签名 id（操作前用户确认签名记录的 id）
	 * @param iuid	调用者 id
	 * @return 		Error Code
	 */
	public ServiceResult<Integer> deleteAuthority(int auid, int sid, int iuid);

	/**
	 * 更新权限
	 * @param authority	权限实体
	 * @param sid   签名 id（操作前用户确认签名记录的 id）
	 * @param iuid	调用者 id
	 * @return		Error Code
	 */
	public ServiceResult<Integer> updateAuthority(Authority authority, int sid, int iuid);

	/**
	 * 按用户组 ID 查询权限
	 * @param ugid	User Group ID
	 * @param iuid	调用者 id
	 * @return		用户组所拥有的权限 id 集合
	 */
	public ServiceResult<List<Integer>> queryAuthority(int ugid, int iuid);
	
	/**
	 * 按用户组 ID 查询权限
	 * @param ugid	User Group ID
	 * @param iuid	调用者 id
	 * @return		用户组所拥有的权限集合
	 */
	public ServiceResult<List<Authority>> queryAuthoritys(int ugid, int iuid);
	
	/**
	 * 按权限名  查询权限
	 * @param name	权限名
	 * @param iuid	调用者 id
	 * @return		权限集合
	 */
	public ServiceResult<List<Authority>> findAuthorityByName(String name, int iuid);
	
	/**
	 * 按权限 auid 查询权限
	 * @param auid	权限auid
	 * @param iuid	调用者 id
	 * @return		auid所对应的权限
	 */
	public ServiceResult<Authority> getAuthorityById(int id, int iuid);
	
	/**
	 * 按用户组 ID 查询不在指定用户组权限
	 * @param ugid	User Group ID
	 * @param iuid	调用者 id
	 * @return		用户组没有拥有的权限
	 */
	public ServiceResult<List<Authority>> queryAuthorityExists(int ugid,int iuid);
	
	/**
	 * 在用户组中添加权限
	 * @param ugid  用户组 id
	 * @param auid  权限id
	 * @param iuid  调用者 id
	 * @return	ErrorCode
	 */
	public ServiceResult<Integer> addUserGroupAuthority(int ugid,int sid,List<Integer> auid, int iuid);
	// t_ibcp_usergroup_member 表
	// 检查用户组是否有权限
	// 若存在，直接返回成功
	// 若不存在，将权限添加至用户组，并增加审计追踪记录	
	
	/**
	 * 删除指定用户组权限
	 * @param ugid
	 * @param List<Integer> aidList
	 * @param iuid
	 * @return ErrorCode
	 */
	public ServiceResult<Integer> deleteUserGroupAuthority(int ugid,List<Integer> aidList,int sid,int iuid);

	//根据权限名查找权限
	//添加权限验证
	/**
	 * @param name 权限名
	 * @return ErrorCode 权限对象
	 */
	public ServiceResult<Authority> getAuthority(String name);
	
	/**
	 * 根据权限id获取有这个权限的用户组
	 * @param aid	权限id
	 * @return		用户组id 的List and ErrorCode
	 */
	public ServiceResult<List<Integer>> findUserGroupByAid(int aid);
	
	/**
	 * 根据权限id获取有这个权限的用户组
	 * @param aid	权限id
	 * @return		用户组id 的List and ErrorCode
	 */
	public ServiceResult<List<UserGroup>> findUserGroupsByAid(int aid);
	
	/**
	 * 查询权限名字或描述中出现关键子的记录
	 * @param str	 输入为空格分隔多关键字,多关键字间为“或”关系, 查询权限名字或描述中出现关键子的记录
	 * @return	权限ID的List and ErrorCode
	 */
	public ServiceResult<List<Integer>> findAuthority(String str);
	
	/**
	 * 查询权限名字或描述中出现关键字的记录
	 * @param str	 输入为空格分隔多关键字,多关键字间为“或”关系, 查询权限名字或描述中出现关键字的记录
	 * @return	权限实体的List and ErrorCode
	 */
	public ServiceResult<List<Authority>> findAuthorityDetail(String str);
}
